package com.fancy.projecty.A_流程相关;

import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.repository.ProcessDefinitionQuery;
import org.activiti.engine.runtime.ProcessInstance;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;

/**
 * 查询流程定义信息
 */
@RunWith(SpringRunner.class)
@SpringBootTest
public class E_查询流程定义信息 {


	@Autowired
	/*执行管理、包括启动、推进、删除流程实例等操作*/
	private RuntimeService runtimeService;
	@Autowired
	/*任务管理,可以做任务的查询的*/
	private TaskService taskService;

	@Autowired
	/*管理流程定义,部署相关的Service*/
	private RepositoryService repositoryService;

	@Test
	public void c_查询所有已经部署的流程定义() {
		List<ProcessInstance> list = this.runtimeService.createProcessInstanceQuery()
				.list();
		System.out.println(list.toString());
	}


	@Test
	public void a_1流程定义的查询() {
		//3.得到ProcessDefinitionQuery对象,可以认为它就是一个查询器
		ProcessDefinitionQuery processDefinitionQuery = this.repositoryService.createProcessDefinitionQuery();

		//4.设置条件，并查询出当前的所有流程定义   查询条件：流程定义的key=holiday

		/*假如说公司有好几十套流程,有调岗的流程,请假的流程等等,这样的话就有很多流程,就需要条件查询了.
		这个可能会展示到网页上去是比较好的.
		 */

		//orderByProcessDefinitionVersion() 设置排序方式,根据流程定义的版本号进行排序

		List<ProcessDefinition> list = processDefinitionQuery.processDefinitionKey("holiday")
				//当然还可以根据多个进行排序
				.orderByProcessDefinitionVersion()
				.desc().list();

		if (list != null && list.size() != 0) {
			//5.输出流程定义信息
			for (ProcessDefinition processDefinition : list) {
				System.err.println("------");
				System.err.println("流程定义ID：" + processDefinition.getId());
				System.err.println("流程定义名称：" + processDefinition.getName());
				System.err.println("流程定义的Key：" + processDefinition.getKey());
				System.err.println("流程定义的版本号：" + processDefinition.getVersion());
				System.err.println("流程部署的ID:" + processDefinition.getDeploymentId());
//				流程定义ID：holiday:1:4
//				流程定义名称：请假流程
//				流程定义的Key：holiday
//				流程定义的版本号：1
//				流程部署的ID:1
			}
		} else {
			System.err.println("流程查询为空");
		}
	}


}
